import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class javatest2 {
    public static void main(String[] args) {

    }

    public static String getall(Object obj){
        List<Field> allFields = new ArrayList<>(100);

        // 获取当前对象的所有属性字段
        // clazz.getFields()：获取public修饰的字段
        // clazz.getDeclaredFields()： 获取所有的字段包括private修饰的字段
        allFields.addAll(Arrays.asList(obj.getClass().getDeclaredFields()));

        // 获取所有父类的字段， 父类中的字段需要逐级获取
        Class clazzSuper = obj.getClass().getSuperclass();

        // 如果父类不是object，表明其继承的有其他类。 逐级获取所有父类的字段
        while (clazzSuper != Object.class) {
            allFields.addAll(Arrays.asList(clazzSuper.getDeclaredFields()));
            clazzSuper = clazzSuper.getSuperclass();
        }
        StringBuilder sb=new StringBuilder();
        allFields.stream().forEach(field -> {
            // 设置字段可访问， 否则无法访问private修饰的变量值
            field.setAccessible(true);
            try {
                // 获取字段名称
                String fieldName = field.getName();

                // 获取指定对象的当前字段的值
                Object fieldVal = field.get(obj);
                if(fieldVal!=null)
                    sb.append(String.format("&%s=%s",fieldName));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        });
        if(sb.toString().length()!=0)
            return sb.substring(1);
        return sb.toString();
    }
}
